Route53フェイルオーバでSorryページをELBのターゲットにしたLambdaで表示させる
こんにちは、久住です。
前回のSorryページ表示の固定レスポンス表示に引き続き、今回はELBのバックエンドでLamdaを利用する方法で検証してみたいと思います。
LambdaをELBのターゲットへの設定は昨年のre:Invent2018で追加された新機能で、本機能を利用することで静的コンテンツに変数としてDBから情報をわたして表示させたり、APIを呼び出してリアルタイムで詳細な障害情報を表示させる等より表示させるコンテンツの幅が広がります。
主な設定については前回と変わらないので、前回の投稿も合わせて見ていただけると良いかと思います。
はじめに
今回はRoute53フェイルオーバでELBの固定レスポンスを返す構成を試します。
Route53フェイルオーバは前回同様「ターゲットの正常性評価」を利用します。
全体構成
名前解決やフェイルオーバでのSorryページ表示の構成は下記の通りです。
設定(固定レスポンスとの差分)
主な設定内容は前回のALBの固定レスポンスでのSorryページ表示と同じです。
- Route53設定
- ホストゾーン(InternetVPNやDirectConnect経由であればPrivate)
- プライマリレコードセットの設定(フェイルオーバとターゲット正常性評価)
- セカンダリレコードセットの設定(フェイルオーバ)
- ELB設定
- プライマリ(正常系アクセス)用ELB設定
- ★セカンダリ(Sorryページ)用ELB設定
今回は★セカンダリ(Sorryページ用)ELB設定が変更点なので、こちらを解説していきます。
ELB設定
セカンダリ(Sorryページ)用のELB
Sorryページ用のELBはターゲットにLambdaを設定します。
詳細の設定については下記投稿を御覧ください。
https://dev.classmethod.jp/cloud/aws/alb-support-for-lambda-tutorial/
ターゲットグループの設定
ターゲットの種類でLambdaが設定できるのでLambdaを選択します。Sorryページ用のコンテンツを配置するLambdaの設定については下記ページのサンプルコードをいい感じに書き換えました。
https://aws.amazon.com/jp/blogs/news/lambda-functions-as-targets-for-application-load-balancers
フェイルオーバしてみた
通常アクセス用のELBの配下に配置しているEC2を停止すると、Route53のターゲット正常性評価がはたらき、プライマリからセカンダリにフェイルオーバすることが確認できました。
フェイルオーバ時のSorryページ
フェイルオーバの時間
固定レスポンスと同様に「ターゲットのヘルスチェック」時間をチューニングすることで短縮できますが、ALIASレコードのTTLが60秒なのでそれ以上の短縮は難しそうです。
最後に
2回に渡って、Route53のターゲット正常性評価を利用したSorryページの表示を検証しました。
この方法ではPrivateホステッドゾーン(+Route53 Resolver)とInternalELBを利用することでDirectConnectやInternetVPN経由で提供しているシステムのSorryページ表示をパブリック経由にすることなく実装することができます。
インターネット公開しているシステムではCloudfront→S3で静的コンテンツとしてSorryページを表示させることがよくありますがネットワーク要件的に難しい場合に本手法を検討してみてはいかがでしょうか。
また、閉域接続に関わらずインターネット公開システムでも利用できる仕組みですので、Lambdaでの別リソースから情報を引っ張ってくる場合等においては有用な方法なのではないでしょうか。
参考
https://dev.classmethod.jp/cloud/aws/route53-elb-healthcheck/
https://dev.classmethod.jp/cloud/aws/route53-internalelb-dns-failover/